1. /* sxfbcoss.cpp by K.Tsuru */
  2. // function ID 5202 BRADIX
  3. #ifndef SN_H
  4. #include "sn.h"
  5. #endif
  6. /***************
  7. SDecimal class
  8. cos x by series
  9. ****************/
  10. SDecimal BcosSeries(const SDouble& x){
  11. SDouble Xsq(x*x);
  12. SDecimal sum(1.0), xsq, delta, q;
  13. xsq = q.ConvToBin(Xsq);
  14. XsDiv(xsq, 2, delta);
  15. ulong mt = delta.SlOpMaxValue(), n = 3, den;
  16. XXSub(sum, delta, sum);
  17. do{
  18. den = n*(n+1);
  19. if(den > mt) break;
  20. q = delta*xsq;
  21. XsDiv(q, den, delta);
  22. if(n & 2) XXAdd(sum, delta, sum);
  23. else XXSub(sum, delta, sum);
  24. n += 2;
  25. } while(delta.Sign());
  26. while(delta.Sign()){
  27. if(n > mt){
  28. sum.SetError(sum.NOT_CONVERGE,"BcosSeries", -5202);
  29. break;
  30. }
  31. q = delta*xsq;
  32. XsDiv(q ,n, delta);
  33. XsDiv(delta, n+1, delta);
  34. if(n & 2) XXAdd(sum, delta, sum);
  35. else XXSub(sum, delta, sum);
  36. n += 2;
  37. }
  38. sum.upToTerm = (long)n/2;
  39. return sum;
  40. }

sxfbcoss.cpp : last modifiled at 2015/12/15 13:58:41(915 bytes)
created at 2015/12/22 16:09:56
The creation time of this html file is 2017/10/27 15:45:59 (Fri Oct 27 15:45:59 2017).